import { createStore, applyMiddleware, combineReducers } from "redux";
// redux-thunk 帮助你统一了 [异步] 和 [同步] action 的调用方式
// redux 异步 action 中间件
// 这里使用 redux-thunk 的 withExtraArgument 调用异步的时候， 可以在 action 中获取到参数，
// 这可以向 action 中 inject 参数, 在 action 中的第三个参数可以获取到
import thunk from "redux-thunk";

import homeReducer from "../pages/Home/reducer";


// 这里的 reducer 是动态的， 或者是所有的 reducer 的组合
// const reducer = (state = { name: "joah" }, action) => {
//   return state
// }

const reducer = combineReducers({
  home: homeReducer
})

// 避免在服务端产生单例的 store； 这样导致所有的用户引入的是同一个 store
export const getStore = () => {
  return createStore(reducer, applyMiddleware(thunk.withExtraArgument("client")))
}

export const getClientStore = () => {
  // 从 window context 中获取数据， client 数据脱水
  const initState = window.context.state;
  return createStore(reducer, initState, applyMiddleware(thunk.withExtraArgument("server")))
}

// NOTE: 让中间层来作为数据层，避免 client 端直接向后端服务器请求数据
//